#include"comment.h"

int main()
{
  key_t key = ftok(PATH_NAME,PROJ_ID);
  if(key < 0){
    perror("ftok");
    return 1;
  }
  int shmid = shmget(key, MEMORY_SIZE, IPC_CREAT|IPC_EXCL|0666);
  //创建全新的shm，如果和系统存在ID冲突，出错返回-1
  //0666是权限
  if(shmid < 0)
  {
    perror("shmget");
    return 2;
  }
  printf("key: 0x%x, shmid: %d\n",key,shmid);
  //将该进程与申请的共享内存挂接
  char* mem = (char*)shmat(shmid,NULL,0);
  
  //实现通信逻辑
  while(1){
    sleep(1);
    printf("%s\n",mem);
    //本进程是读取进程，认为共享内存里面放的就是常字符串
    //类比于malloc申请下来的空间
  }
  shmdt(mem);
  printf("detaches shm success\n");
  sleep(5);
  
  //释放资源，不是真的释放，只是不允许后续有进程再挂接
  //等到共享内存没有挂接进程的时候，共享内存才会被释放
  shmctl(shmid, IPC_RMID, NULL);
  printf("key: 0x%x, shmid: %d -> shm delete success\n", key, shmid);
  sleep(10);
  return 0;
}
